/**
 *
 * @author Cesar Mamani Lipa
 * @date   01/04/2010
 */

package pe.gob.pnp.despachadores;

import java.sql.*;
import java.util.*;
import oracle.jdbc.*;
import pe.gob.pnp.actions.*;
import pe.gob.pnp.factories.*;

public class GradoDespachador {


    public static List<Grado> obtenerGradoPersona(int NPERS_IDENTIFICADO) throws SQLException{
        Grado g = new Grado();
        List<Grado> listGrado = new ArrayList<Grado>();
        Connection conn = null;
        try{
            conn = ConnectionPool.obtenerConexion();
            String sql = "{call SP_OBTENER_GRADO_PERSONA(?,?)}";
            CallableStatement cs = conn.prepareCall(sql);
            cs.setInt(1, NPERS_IDENTIFICADO);
            cs.registerOutParameter(2, OracleTypes.CURSOR);
            cs.execute();
            ResultSet rs = (ResultSet) cs.getObject(2);
            //ResultSet rs = cs.executeQuery();
            if(rs.next()){
                g = new Grado();
                g.setNgradIdentificador(rs.getInt("NGRAD_IDENTIFICADOR"));
                g.setCgradDescripcion(rs.getString("CGRAD_DESCRIPCION"));
                listGrado.add(g);
            }
        }
        finally{
            ConnectionPool.liberarConexion(conn);
        }
        return listGrado;
    }

     public static List<Grado> obtenerGrados(int tipo) throws SQLException {
        List<Grado> lstGrados = new ArrayList<Grado>();
        Connection conn = null;
        try {
            conn = ConnectionPool.obtenerConexion();
            String sql = "{call SP_OBTENER_GRADO(?,?)}";
            CallableStatement cs = conn.prepareCall(sql);
            System.out.println(tipo);
            cs.setInt(1, tipo);//por defecto deberia ser-1 para que traiga una lista
            cs.registerOutParameter(2, OracleTypes.CURSOR);
            cs.execute();
            ResultSet rs = (ResultSet) cs.getObject(2);
            while (rs.next()) {
                Grado grado = new Grado();
                grado.setNgradIdentificador(rs.getInt("NGRAD_IDENTIFICADOR"));
                grado.setCgradDescripcion(rs.getString("CGRAD_DESCRIPCION"));
                grado.setDgradFechacreacion(rs.getDate("DGRAD_FECHACREACION"));
                grado.setNgradGradosuperior(rs.getInt("NGRAD_GRADOSUPERIOR"));
                grado.setCgradDescripcionsuperior(rs.getString("CGRAD_DESCRIPCION_SUPERIOR"));
                grado.setNtippIdentificador(rs.getInt("NTIPP_IDENTIFICADOR"));
                grado.setCtippDescripcion(rs.getString("CTIPP_DESCRIPCION"));
                grado.setCgradSigla(rs.getString("CGRAD_SIGLA"));
                lstGrados.add(grado);
            }
        } finally {
            ConnectionPool.liberarConexion(conn);
        }
        return lstGrados;
    }

     public static Grado obtenerGrado(int id_grado) throws SQLException {
        Grado grado  = null;
        Connection conn = null;
        try {
            conn = ConnectionPool.obtenerConexion();
            String sql = "{call SP_OBTENER_GRADO_INFO(?,?)}";
            CallableStatement cs = conn.prepareCall(sql);
            cs.setInt(1, id_grado);
            cs.registerOutParameter(2, OracleTypes.CURSOR);
            cs.execute();
            ResultSet rs = (ResultSet) cs.getObject(2);
            if (rs.next()) {
                grado = new Grado();
                grado.setNgradIdentificador(rs.getInt("NGRAD_IDENTIFICADOR"));
                grado.setCgradDescripcion(rs.getString("CGRAD_DESCRIPCION"));
                grado.setDgradFechacreacion(rs.getDate("DGRAD_FECHACREACION"));
                grado.setNgradGradosuperior(rs.getInt("NGRAD_GRADOSUPERIOR"));
                grado.setCgradDescripcionsuperior(rs.getString("CGRAD_DESCRIPCION_SUPERIOR"));
                grado.setNtippIdentificador(rs.getInt("NTIPP_IDENTIFICADOR"));
                grado.setCtippDescripcion(rs.getString("CTIPP_DESCRIPCION"));
                grado.setCgradNombrecorto(rs.getString("cgrad_nombrecorto"));
                grado.setCgradSigla(rs.getString("CGRAD_SIGLA"));
                grado.setNgrgr_identificador(rs.getInt("NGRGR_IDENTIFICADOR"));
            }
        } finally {
            ConnectionPool.liberarConexion(conn);
        }
        return grado;
    }

    public static void agregarGrado(Grado grado) throws SQLException {
        Connection conn = null;
        try {
            conn = ConnectionPool.obtenerConexion();
            String sql = "{call SP_AGREGAR_GRADO(?,?,?,?)}";
            CallableStatement cs = conn.prepareCall(sql);
            cs.setString(1, grado.getCgradDescripcion());
            cs.setInt(2, grado.getNgradGradosuperior());
            cs.setInt(3, grado.getNtippIdentificador());
            cs.setString(4, grado.getCgradSigla());
            cs.execute();
        } finally {
            ConnectionPool.liberarConexion(conn);
        }
    }

    public static void modificarGrado(Grado grado) throws SQLException {
        Connection conn = null;
        try {
            conn = ConnectionPool.obtenerConexion();
            String sql = "{call SP_MODIFICAR_GRADO(?,?,?,?,?)}";
            CallableStatement cs = conn.prepareCall(sql);
            cs.setString(1, grado.getCgradDescripcion());
            cs.setInt(2, grado.getNgradGradosuperior());
            cs.setInt(3, grado.getNtippIdentificador());
            cs.setString(4, grado.getCgradSigla());
            cs.setInt(5, grado.getNgradIdentificador());
            cs.execute();
        } finally {
            ConnectionPool.liberarConexion(conn);
        }
    }

    public static void eliminarGrado(int ngradIdentificador) throws SQLException {
        Connection conn = null;
        try {
            conn = ConnectionPool.obtenerConexion();
            String sql = "{call SP_ELIMINAR_GRADO(?)}";
            CallableStatement cs = conn.prepareCall(sql);
            cs.setInt(1, ngradIdentificador);
            cs.execute();

        } finally {
            ConnectionPool.liberarConexion(conn);
        }
    }

    public static GrupoGrado obtenerGrupoGrado(Integer cab) throws SQLException {
        GrupoGrado grado  = null;
        Connection conn = null;
        try {
            conn = ConnectionPool.obtenerConexion();
            String sql = "select ngrgr_identificador,bgrgr_eliminado,cgrgr_descripcion from SISMA_GRUPOGRADO where ngrgr_identificador=?";
            PreparedStatement ps = conn.prepareStatement(sql);
            ps.setInt(1, cab);
            ResultSet rs = ps.executeQuery();
            if (rs.next()) {
                grado = new GrupoGrado();
                grado.setNgrgr_identificador(rs.getInt("Ngrgr_identificador"));
                grado.setCgrgr_descripcion(rs.getString("Cgrgr_descripcion"));
                grado.setBgrgr_eliminado(rs.getInt("Bgrgr_eliminado"));
            }
        } finally {
            ConnectionPool.liberarConexion(conn);
        }
        return grado;
    }
}

